package svpo;


import Validation.Cpf;
import Validation.Data;
import Validation.ValidaSimples;
import java.text.ParseException;
import java.util.Calendar;
import java.util.GregorianCalendar;


/** <b> Classe que é a representação real dos dados do Usuário..</b>
 *
 * @author Gustavo C.
 * @author Rodrigo M.
 */
public class User {
    //Atributos de um usuário
    private  String nome , cpf , endereco ,telefone ,telefonePais , telefoneRegiao,email , senha;
    private String nascimento;
    
   //Objeto que administra os logs
  // private static Logger log = Logger.getLogger(User.class.getName());
   
   /** <b> Construtor padrão, sem argumentos. </b> */
    
    public User() {
        setNome("João");
        setCpf("455.652.442-34");
        setEndereco("Rua 2 , Casa 5");
        setTelefonePais("55");
        setTelefoneRegiao("61");
        setTelefone("8455-0987");
        setEmail("joao@hotmail.com");
        setNascimento("21/02/1992");
        setSenha("123abc");
    }
    
    /** <b> Construtor para a classe.
     @param nome Nome do usuário.
     @param cpf CPF do usuário.
     @param endereco Endereço do usuário.
     @param DDI Telefone do usuário.
     @param DDD Telefone do usuário.
     @param telefone Telefone do usuário.
     @param email E-mail do usuário.
     @param nascimento Data de Nascimento do  usuário. 
     @param senha Senha do usuário. </b>*/

    public User(String nome, String cpf, String endereco, String TelefonePais,String TelefoneRegiao, String telefone, String email, String nascimento, String senha) {
        setNome(nome);
        setCpf(cpf);
        setEndereco(endereco);
        setTelefonePais(TelefonePais);
        setTelefoneRegiao(TelefoneRegiao);
        setTelefone(telefone);
        setEmail(email);
        setNascimento(nascimento);
        setSenha(senha);
    }
    
    //Métodos setters e getters

     /** <b> Método set para o cpf do usuário.
    @param cpf CPF do usuário..</b>
    */
    public void setCpf(String cpf) {
        try {
            Cpf c = new Cpf(cpf);
            if (c.ValidaCpf()) {
                this.cpf = cpf;
            } else {
                //log de cpf inválido
            }
        } catch (NumberFormatException ex) {
            //log digita apenas números
        } catch (StringIndexOutOfBoundsException e) {
            //log cpf grande demais
        }
    }
    
     /** <b> Método set para o Email do usuário.
    @param email Email do usuário..</b>
    */
    public void setEmail(String email) {
        this.email = email;
    }

    /** <b> Método set para o Endereço do usuário.
    @param endereco Endereço do usuário..</b>
    */
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

     /** <b> Método set para o Nascimento do usuário.
    @param nascimento Nascimento do usuário..</b>
    */
    public void setNascimento(String nascimento) {
        try {
            if (Data.validarData(nascimento)) {
                this.nascimento = nascimento;
            } else {
                //log data inválida
            }
        } catch (ParseException ex) {
            //log Digite uma data no formato (dd/mm/yyyy)
        }

    }

    /** <b> Método set para o Nome do usuário.
    @param nome Nome do usuário..</b>
    */
    public void setNome(String nome) {
         ValidaSimples valida = new ValidaSimples();

        if (valida.validaNome(nome) == 1) {
            this.nome = nome;
        } else {
            //log nome incorreto
        }

    }

     /** <b> Método set para a Senha do usuário.
    @param senha Senha do usuário..</b>
    */
    public void setSenha(String senha) {
        this.senha = senha;
    }

     /** <b> Método set para o Telefone do usuário.
    @param telefone Telefone do usuário..</b>
    */
    public void setTelefone(String telefone) {
         ValidaSimples valida = new ValidaSimples();

        if (valida.validaTelefone(telefone) == 1) {
            this.telefone = telefone;
        } else {
           //log telefone incorreto
        }
    }
    /** <b> Método set para o DDI, com tratamento de erros.
    @param telefonePais DDI do usuário.</b> */

    public void setTelefonePais(String telefonePais) {
        ValidaSimples valida = new ValidaSimples();

        if (valida.validaDDD(telefonePais) == 1) {
            this.telefonePais = telefonePais;
        } else {
            //log ddi incorreto

        }
    }

   /** <b> Método set para o DDD, com tratamento de erros.
         @param telefoneRegiao DDD do usuário..</b>
    */

    public void setTelefoneRegiao(String telefoneRegiao) {
        ValidaSimples valida = new ValidaSimples();

        if (valida.validaDDD(telefoneRegiao) == 1) {
            this.telefoneRegiao = telefoneRegiao;
        } else {
            //log ddd incorreto

        }
    }

    /** <b> Método para retorno do cpf.
    *   @return String - cpf - Retorna o cpf do usuário.</b>
    */
    public String getCpf() {
        return cpf;
    }

    /** <b> Método para retorno do email.
    *   @return String - email - Retorna o email do usuário.</b>
    */
    public String getEmail() {
        return email;
    }

    /** <b> Método para retorno do Endereço.
    *   @return String - endereco - Retorna o endereço do usuário.</b>
    */
    public String getEndereco() {
        return endereco;
    }

    /** <b> Método para retorno do nascimento.
    *   @return Calendar - nascimento - Retorna o nascimento do usuário.</b>
    */
    public String getNascimento() {
        return nascimento;
    }

     /** <b> Método para retorno do Nome.
    *   @return String - nome - Retorna o nome do usuário.</b>
    */
    public String getNome() {
        return nome;
    }

     /** <b> Método para retorno da Senha.
    *   @return String - senha - Retorna a senha do usuário.</b>
    */
    public String getSenha() {
        return senha;
    }

     /** <b> Método para retorno do Telefone.
    *   @return String - telefone - Retorna o telefone do usuário.</b>
    */
    public String getTelefone() {
        return telefone;
    }
    /** <b> Método para retorno do DDI.
     * @return String - telefonePais - Retorna o DDI do contribuinte.</b> */

    public String getTelefonePais() {
        return telefonePais;
    }

    /** <b> Método para retorno do DDD.
     * @return String - telefoneRegiao - Retorna o DDD do contribuinte.</b> */
    public String getTelefoneRegiao() {
        return telefoneRegiao;
    }
    
    
    
}
